<?php



class Welcome extends CI_Controller {



    /**

     * 构造方法会在类被实例化之前自动运行

     * 利用这一特性，实现自动加载模型的目的

     */

    public function __construct() {

        // 调用父类的构造方法

        parent::__construct();

        // 加载学生信息模型，并简写为task

        $this->load->model('Taskinfo_model', 'task');

    }



    /**

     * index方法是CodeIgnite控制器的默认方法

     * 因此，我们将程序的入口放在index方法中

     * 在这里，我们调用学生信息填写表单。

     * @return void

     */

    public function index() {

        $this->load->view('form.html');

    }



    /**

     * 表单验证方法，用来检验用户输入的信息是否符合要求

     * @return void

     */

    public function handle() {

        // 载入验证类

        $this->load->library('form_validation');



        // 设置验证规则

        // 验证规则的三个参数分别是字段名、提示信息、验证规则

        $this->form_validation->set_rules('stuname', '姓名', 'callback_username_check');

        $this->form_validation->set_rules('stunumber', '学号', 'callback_stunumber_check');

        $this->form_validation->set_rules('stuurl', '仓库地址', 'callback_stuurl_check');



        // 运行验证规则

        if ($this->form_validation->run()) {

            // 如果通过验证，则将其保存到数据库

            $this->saveToDb();

            // 显示全部数据，并显示提示信息

            $this->display('您的信息已存储到数据库！');

        } else {

            $this->load->view('form.html');

        }

    }



    /**

     * 学生姓名检验方法

     * @param  string $str 姓名

     * @return bool

     */

    public function username_check($str) {

        // 设置正则表达式模式

        $pattern = '/^[\x80-\xff]{6,}$/';

        // 验证

        if (!preg_match($pattern, $str)) {

            $this->form_validation->set_message('username_check', '姓名至少为两个汉字，不能有数字和字母');

            return FALSE;

        } else {

            return TRUE;

        }

    }



    /**

     * 学生学号检验方法

     * @param  string $str  学号

     * @return bool         是否通过检验

     */

    public function stunumber_check($str) {

        // 设置正则表达式

        $pattern = '/^[pP]1[3-7]\d{7}$/';

        // 验证

        if (!preg_match($pattern, $str)) {

            $this->form_validation->set_message('stunumber_check', '学号必须为10位，且开头为p');

            return FALSE;

        } else {

            return TRUE;

        }

    }



    /**

     * 学生作业地址检验方法

     * @param  string $str  作业地址

     * @return bool         是否通过检验

     */

    public function stuurl_check($str) {

        // 设置正则表达式

        $pattern = '@^https://(.*?)/(.*?)/(.*).git$@';

        // 验证

        if (!preg_match($pattern, $str)) {

            $this->form_validation->set_message('stuurl_check', '仓库地址为https://网站/用户名/仓库名.git');

            return FALSE;

        } else {

            return TRUE;

        }

    }



    /**

     * 存储用户输入信息到数据库

     * @return void

     */

    public function saveToDb() {

        // 先将数据存放到数组

        // 使用内置input类进行输入信息的过滤

        $data['stuname']   = $this->input->post('stuname');

        $data['stunumber'] = $this->input->post('stunumber');

        $data['stuclass']  = $this->input->post('stuclass');

        $data['stuurl']    = trim($this->input->post('stuurl'));

        // 调用模型存储数据

        $this->task->add($data);

    }



    /**

     * 显示全部学生提交信息

     * @return void

     */

    public function display($message = '') {

        // 获取所有学生作业信息

        $data['students'] = $this->task->getAll();

        $data['message']  = $message;

        // 显示信息

        $this->load->view('message.html', $data);

    }



    /**

     * 显示作业详细，并给出平时成绩

     * @param  integer $id 学生编号

     * @return void

     */

    public function score($id = 0) {

        // 获取作业详细信息

        $data['info'] = $this->task->creatStuTaskInfo($id);

        // 显示作业详细信息

        if ($data['info']) {

            $this->load->view('score.html', $data);

        } else {

            $this->load->view('error.html');

        }

    }



    public function test($value = '') {

        $ch = curl_init("http://top.baidu.com");



        curl_setopt($ch, CURLOPT_HEADER, 0);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);



        $data = curl_exec($ch);

        $str  = iconv("GB2312", "UTF-8", $data);



        $pattern = '@<div id="box-today" class="box-today">.*?<a target="_blank" href=".*?">(?<title>.*?)</a>.*?事件.*?<a target="_blank" href=".*?">(.*?)</a>@s';

        preg_match($pattern, $str, $matches);

        echo $matches['title'];



        curl_close($ch);

    }

    /**

     * 抓取学校网站通知列表数据

     * @return [type] [description]

     */

    public function get_notice_list() {

        // 初始化curl类

        $ch  = curl_init();

        $url = 'http://www.xbmu.edu.cn/frontChannel.action?siteId=1&articleClassId=104';

        // 设定curl搜索地址

        curl_setopt($ch, CURLOPT_URL, $url);

        // 设定curl不返回头信息

        curl_setopt($ch, CURLOPT_HEADER, 0);

        // 设定curl不在网页中直接显示抓取内容

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        $content = curl_exec($ch);

        curl_close($ch);

        // 设置抓取正则表达式

        $pattern = '/<li><span>(?<post_time>.*?)<\/span>.*?articleId=(?<post_id>\d*).*?\>(?<post_title>.*?)<\/a>.*?<\/li>/s';

        // // 执行正则表达式

        preg_match_all($pattern, $content, $matched);

        // 取前十条数据

        for ($i = 0; $i < 10; $i++) {

            $data[$i] = array(

                'post_href'  => $matched['post_id'][$i],

                'post_title' => $matched['post_title'][$i],

            );

        }

        var_dump($data);

    }



    public function info($value = '') {

        phpinfo();

    }



    public function curl($url = '') {



        // 初始化curl函数

        $ch = curl_init($url);



        // 设置必要的配置信息

        curl_setopt($ch, CURLOPT_HEADER, 0);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);



        // 执行curl

        $data = curl_exec($ch);



        // 关闭curl,释放资源

        curl_close($ch);



        return $data;

    }



    public function getStdNotice() {

        $data = $this->curl('https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gbk&word=%C2%B9%EA%CF&fr=ala&ala=1&alatpl=star&pos=0&hs=2&xthttps=111111/');



        $pattern = '@<a href="(?<url>.*?)" target="_blank">(?<title>.*?)</a>.*?我的图片:(?<date>.*?)</td>@s';

        preg_match_all($pattern, $data, $matches);

        // echo '<pre>';

        // var_dump($matches['url'], $matches['title'], $matches['date']);

        // echo '</pre>';

        echo '<table>';

        for ($i = 0; $i < 5; $i++) {

            echo '<tr><td><a href="' . $matches['url'][$i + 1] . '">' . $matches['title'][$i] . '</a></td><td>' . date('Y-m-d', strtotime($matches['date'][$i])) . '</td></tr>';

        }

        echo '</table>';

    }



} // 大类结束

